﻿#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//int main()
//{
//	int a = 10000;
//	FILE* pf = fopen("test.txt", "wb");
//	fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	//打开文件
//	//FILE* pf = fopen("test.txt", "w");
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//文件操作
//	//fputc('a', pf);
//	char ch = fgetc(pf);
//	printf("%c\n", ch);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	//文件打开
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//文件操作
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//文件关闭
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	FILE* pf1 = fopen("data.txt", "r");
//	if (pf1 == NULL)
//	{
//		perror("pf1_fopen");
//		return 1;
//	}
//	FILE* pf2 = fopen("data_copy.txt", "w");
//	if (pf2 == NULL)
//	{
//		perror("pf2_fopen");
//		return 1;
//	}
//	int ch = 0;
//	while ((ch = fgetc(pf1)) != EOF)
//	{
//		fputc(ch, pf2);
//	}
//	fclose(pf1);
//	pf1 = NULL;
//	fclose(pf2);
//	pf2 = NULL;
//	return 0;
//}


//#include<stdio.h>
//#include<assert.h>
//#include<math.h>
//#include<limits.h>
//int my_atoi(char* pa)
//{
//	assert(pa);
//	long long int num = 0;
//	int sum = 0;
//	int flag = 1;
//	while (*pa == ' ')//是不是空格
//		pa++;
//	if (((*pa) >= 48 && (*pa) <= 57)||(*pa) == '-')//是不是有效值
//	{
//		char* ret = pa;//首位有效数值的地址
//		while (1)
//		{
//			if (((*pa) >= 48 && (*pa) <= 57) || (*pa) == '-')//有效值位数
//			{
//				if ((*pa) == '-')
//				{
//					flag = -flag;//判断正负
//					pa++;
//					
//				}
//				else
//				{
//					pa++;
//					num++;
//				}
//			}
//			else
//			{
//				break;
//			}
//		}
//		if (flag == -1)//判断正负
//		{
//			ret++;
//		}
//		while (num--)//计算sum
//		{
//			sum += ((*ret) - '0') * pow(10, num)*flag;
//			ret++;
//		}
//		//返回值
//		if (sum < INT_MAX && sum >= 0)
//		{
//			return (int)sum;
//		}
//		else if (sum >= INT_MAX)
//		{
//			sum = INT_MAX;
//			return (int)sum;
//		}
//		else if (sum > INT_MIN && sum < 0)
//		{
//			return (int)sum;
//		}
//		else
//		{
//			return (int)INT_MIN;
//		}
//	}
//	else
//	{
//		return 0;
//	}
//}
//int main()
//{
//	char arr[200];
//	fgets(arr, 200, stdin);
//	int ret = my_atoi(arr);
//	printf("%d\n", ret);
//	return 0;
//}

//pow导致精度缺失

#include<stdio.h>
#include<assert.h>
#include<limits.h>

int my_atoi(char* pa) {
    assert(pa);
    long long int num = 0;
    int sum = 0;
    int flag = 1;

    while (*pa == ' ') // 忽略空格
        pa++;

    if (*pa == '-') { // 检查负号
        flag = -1;
        pa++;
    }

    while (*pa >= '0' && *pa <= '9') { // 处理数字字符
        num = num * 10 + (*pa - '0');
        pa++;
    }

    sum = flag * num; // 计算结果

    // 检查是否溢出
    if (sum > INT_MAX)
        return INT_MAX;
    else if (sum < INT_MIN)
        return INT_MIN;

    return (int)sum;
}

int main() {
    char arr[200];
    fgets(arr, 200, stdin);
    int ret = my_atoi(arr);
    printf("%d\n", ret);
    return 0;
}
